【Informatica IDMC】Amazon S3 csvファイル ターゲット の形式オプション検証
はじめに
データアナリティクス事業本部ビッグデータチームのyosh-kです。
今回はIDMC CDIでターゲットがS3のcsvファイルである場合に、形式オプションの設定により、どのような差異があるかを検証したいと思います。
前提条件
- IICS CDIを操作できる環境を構築済みであることを前提とします。
- Redshift ServerlessからS3 Bucketへのロード処理を行います。
※ Redshift Serverless接続は以下のブログをご参照ください。
IICS CDI Amazon Redshift V2 ConnectorでRedshift Serverlessと接続できるか試してみた
- 以下SQLよりデータをRedshift Serverless上に用意します。
Table作成
CREATE TABLE IF NOT EXISTS memo( seq BIGINT, memo VARCHAR(100) , update_at TIMESTAMP ) DISTSTYLE AUTO SORTKEY AUTO;
Insert data
INSERT INTO memo (seq,memo, update_at) VALUES (1,'①テスト', '2024-01-01 00:00:00'), (2,'test2\\hoge', '2024-01-01 00:00:00'), (3,'test3"', '2024-01-01 00:00:00'), (4,'test4,', '2024-01-01 00:00:00') ;
概要
今回は、ソースにRedshift Serverless上に作成したテーブルを指定し、ターゲットをS3 Bucketとしてcsvを出力します。
ターゲットの形式オプション
から設定を確認します。
こちらがデフォルトの形式オプションの設定となります。
設定 | デフォルト | 説明 |
---|---|---|
区切り文字 | , | 2 つのデータ列間の境界を示す。次のオプションのいずれかを選択。 カンマ(,)、tab、コロン(:)、セミコロン(;) |
エスケープ文字 | \ | エスケープさせる文字の前に指定する文字。カンマなどの特殊文字を通常の文字として扱う。 |
修飾子 | " | 文字列の境界を定義する文字。囲み文字と同意と理解している。 |
修飾子モード | MINIMAL | ターゲットの修飾子の動作を指定。以下のオプションのいずれかを選択できる: Minimal: デフォルトモード。区切り値または特殊文字で囲まれたデータに修飾子を適用する。 ALL:すべてのデータに修飾子を適用する。 Non_Numeric:情報を確認できず。 All_Non_Null:情報を確認できず。 |
Disable escape char when a qualifier is set | チェック | 修飾子モードが記載されている場合にエスケープ文字は無効となる。 |
コードページ | UTF-8 | Secure Agent がデータを読み取るために使用する必要があるコード ページを選択する。csvに出力する際の文字コードとなる。 |
ヘッダー行番号 | 1 | データのヘッダー行番号の指定。 |
最初のデータ行 | 2 | 最初のデータ行の指定。 |
ターゲットヘッダー | With Header | ターゲットファイルのヘッダー有無を選択。 |
ディストリビューションカラム | 複数ターゲットを生成する際の分散カラムを指定。 | |
プレビューする最大行数 | プレビューする最大行数。 | |
行区切り文字 | データの行を区切るための文字として設定できる。以下の値を設定可能。\r\n ,\n , \r |
- Formatting Options
- Distribution column
- After the R39 upgrade, the data is written to Amazon S3 V2 target without Double quotes.
今回は上記、修飾子モードのMINIMAL
とALL
の挙動の違い、また、コードページをShift-JIS
にした際の挙動について確認していきます。
検証1 修飾子モードをMINIMAL
まずはデフォルトの状態で検証します。
実行後に生成されたcsvファイルです。MINIMALモードの場合は、区切り値または特殊文字で囲まれたデータに修飾子を適用するので、3,4行目で修飾子"
で囲んでいます。2行目の\
についてはエスケープされていることが確認でき、3行目の"
もエスケープ処理されていることがわかります。それ以外の値については、修飾子"
が適用されていないことを確認しました。
検証2 修飾子モードをALL
修飾子モードをALL
に修正して検証します。
全ての値が修飾子"
で囲まれていることを確認しました。
検証3 コードページをShift-JIS
コードページをUTF-8
からShift-JIS
に修正して検証してみます。
結果としては、1行目の①
という文字列がShift-JIS
では文字化けしてしまいます。
UTF-8で開いた場合 Shift-JISで開いた場合
これは、①
という文字列がShift-JIS
では取り扱えず、正式にはCP932
で取り扱える文字列であるためです。そのため、IICSで取り扱う場合は、全てのUnicode文字をカバーしているUTF-8
を選択する必要があります。
最後に
検証した結果、修飾子モードは、全ての値に修飾子が付かないMINIMAL
ではなく、ALL
を利用していくのがフォーマットを統一する上でも安全であると思いました。